import { useCallback } from 'react';
import { z } from 'zod';
import { useReactFlow } from '@xyflow/react';
import { useFlowStore } from '../store/flowStore';
import { importFromHierarchyJSON } from '../utils/transform';
import { validateHierarchyJSON } from '../schemas/hierarchySchema';
import { useFileImport } from './useFileImport';
import type { HierarchicalNode } from '../utils/transform';

/**
 * 行为树导入处理 Hook
 * 封装从 JSON 导入行为树的逻辑
 */
export function useImportHandler() {
  const { setNodes, setEdges } = useFlowStore();
  const { fitView } = useReactFlow();
  const { importFile } = useFileImport<HierarchicalNode>();

  const handleImport = useCallback(() => {
    importFile({
      accept: '.json',
      maxSize: 10 * 1024 * 1024, // 10MB
      validator: (data): data is HierarchicalNode => {
        // 使用 Zod 验证，如果验证失败会抛出 ZodError
        validateHierarchyJSON(data);
        return true;
      },
      onSuccess: (validatedJson) => {
        try {
          const { nodes: importedNodes, edges: importedEdges } =
            importFromHierarchyJSON(validatedJson);

          // 验证导入的节点数量
          if (importedNodes.length === 0) {
            // 这个错误已经在 useFileImport 中处理了，这里只是额外的检查
            return;
          }

          // 更新节点和边
          setNodes(importedNodes);
          setEdges(importedEdges);

          // 调整视图以适应所有新节点
          fitView({ duration: 800 });
        } catch (error) {
          // importFromHierarchyJSON 可能抛出错误
          console.error('导入行为树失败:', error);
          throw error; // 让 useFileImport 处理错误提示
        }
      },
      onError: (error) => {
        // 处理 Zod 验证错误
        if (error instanceof z.ZodError) {
          const errorMessages = error.issues.map((issue) => issue.message).join(', ');
          console.error('导入失败: JSON 格式验证失败 -', errorMessages);
        } else {
          console.error('导入行为树失败:', error);
        }
      },
    });
  }, [setNodes, setEdges, fitView, importFile]);

  return { handleImport };
}

